from datetime import datetime

import pandas as pd
from pandas import Series

import logging

logging.basicConfig(
    level=logging.DEBUG,
    # 格式说明：
    # %(levelname)8s → 右对齐，总宽度8个字符
    format='%(levelname)8s: %(message)s'
)


def add_year_prefix_enhanced(series: Series, year: str) -> Series:
    # 转换为字符串并验证格式
    str_series = series.astype(str)

    # 检查是否为四位数字
    mask = str_series.str.match(r'^\d{4}$')

    # 添加前缀
    result = year + str_series

    # 标记无效输入
    result[~mask] = "无效格式: " + str_series[~mask]

    return result


# 定义转换函数
def convert_single_date(yyyymmdd):
    try:
        # 提取月份和日期
        year = int(yyyymmdd[:4])
        month = int(yyyymmdd[4:6])
        day = int(yyyymmdd[6:])
        return datetime(year, month, day)
    except (ValueError, TypeError) as e:
        logging.error(f"转换日期格式时出错: {str(e)}")
        # 处理无效格式
        return pd.NaT


def convert_mmdd_to_date(series) -> Series:
    yyyymmdd = add_year_prefix_enhanced(series, "2025")
    se_date = yyyymmdd.apply(convert_single_date)

    # 应用转换函数
    return se_date


def monthday_to_dayofyear(monthday_str: str):
    # 拼接年份（用2024年，闰年不影响相对顺序），转为datetime格式
    date_str = f"2024-{monthday_str[:2]}-{monthday_str[2:]}"
    date_obj = datetime.strptime(date_str, "%Y-%m-%d")
    # 返回该日期是年内第几天（1月1日=1，12月31日=366）
    return date_obj.timetuple().tm_yday
